package dev.ece.core.cells.events;

import dev.ece.core.cells.Cell;
import dev.ece.util.lib.Vector3f;

public interface Mouse3D extends Cell, Mouse3DEvent {

	default boolean isMouseInCell(Vector3f position, Vector3f dir) {
		return false;
	}
	
	/**
	 * 鼠标移动
	 * @param position 射线起点
	 * @param dir 射线方向
	 * @return
	 */
	default boolean mouseMove(Vector3f position, Vector3f dir) {
		if(this.isVisible() && isMouseInCell(position, dir)) {
			return this.onMouseMove(position, dir);
		}
		return false;
	}
	
	/**
	 * 鼠标按键按下
	 * @param button 鼠标按钮
	 * @param position 射线起点
	 * @param dir 射线方向
	 * @return
	 */
	default boolean mouseButtonDown(int button, Vector3f position, Vector3f dir) {
		if(this.isVisible() && isMouseInCell(position, dir)) {
			return this.onMouseButtonDown(button, position, dir);
		}
		return false;
	}
	
	/**
	 * 鼠标按键抬起
	 * @param button 鼠标按钮
	 * @param position 射线起点
	 * @param dir 射线方向
	 * @return
	 */
	default boolean mouseButtonUp(int button, Vector3f position, Vector3f dir) {
		return this.onMouseButtonUp(button, position, dir);
	}
	
	/**
	 * 鼠标点击
	 * @param button 点击按键
	 * @param position 射线起点
	 * @param dir 射线方向
	 * @return
	 */
	default boolean mouseButtonClick(int button, Vector3f position, Vector3f dir) {
		if(this.isVisible() && isMouseInCell(position, dir)) {
			return this.onMouseButtonClick(button, position, dir);
		}
		return false;
	}
	
	/**
	 * 鼠标滚动
	 * @param xoffset x轴滚动
	 * @param yoffset y轴滚动
	 * @param position 射线起点
	 * @param dir 射线方向
	 * @return
	 */
	default boolean mouseScroll(double xoffset, double yoffset, Vector3f position, Vector3f dir) {
		if(this.isVisible() && isMouseInCell(position, dir)) {
			return this.onMouseScroll(xoffset, yoffset, position, dir);
		}
		return false;
	}
	
}
